home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / presto / presto10.lha / src / stack.h < prev    next >
C/C++ Source or Header  |  1991-12-11  |  2KB  |  60 lines

  1. #ifndef __presto__stack_h__
  2. #define __presto__stack_h__
  3.  
  4. //
  5. // Stack maintenance
  6. //
  7. // Modification History:
  8. //
  9. //   05-Dec-89  John Faust
  10. //   Remove all stack free lists.  Allocate stacks of fixed size when thread
  11. //   is allocated.  Stack remains associated with owning thread.  More
  12. //   efficient (removes search of stack freelist for stack of proper size,
  13. //   allocation of stack if one of proper size not found, and eliminates
  14. //   need to balance stack freelists).
  15. //
  16. //   16-Nov-1989  John Faust
  17. //   Add support for per-processor stack freelists.
  18. //
  19.  
  20. #define MINSTACKSIZEXP  (10)
  21. #define ONEK            (1<<10)
  22. //#define DEFSTACKSIZ   (ONEK << 2)                     /* 4k */
  23. //#define DEFSTACKSIZ   (ONEK << 3)                     /* 8k */
  24. #define DEFSTACKSIZ     (ONEK << 4)                     /* 16k */
  25.  
  26. //
  27. // Return how many integral chunks of MINSTACKSIZES fit in the 
  28. // requested stacksize
  29. //
  30. //#define STACKSIZTOMINCHUNKS(sz)    (sz >> MINSTACKSIZEXP)
  31.  
  32. class Stack    {
  33.     int *st_base;        // bottom of stack
  34.     int st_size;        // what user thinks
  35.     int st_limit;        // what we really are
  36. public:
  37.     Stack(int size);
  38.         inline ~Stack()
  39.                 { this->destroy (); }
  40.         inline int size()
  41.                 { return st_size; }
  42.         inline int limit()
  43.                 { return st_limit;}
  44. /* XX machdep */        
  45.     inline int *top()
  46.         { return  (int*)(((int)st_base + st_limit - 4) & ~03);}
  47.     inline void destroy()
  48.         { delete st_base; }
  49.  
  50.         //
  51.         // Disabled.  Stacks only built when threads are allocated, and
  52.         // incrementing a counter atomically on the critical path is too slow.
  53.         // Returns -1.
  54.         //
  55.     int numstacksbuilt();
  56. };
  57.  
  58.  
  59. #endif /* __presto__stack_h__ */
  60.